#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n;
vector<int> e[N];
vector<int> f[N][2];
int s[N][2],g[2][N];
int dep[N];
void dfs(int u,int fa){
    dep[u]=dep[fa]+1;
    for(int v:e[u]){
        if(v==fa)continue;
        dfs(v,u);
    }
    s[u][0]=0,g[0][0]=0;
    s[u][1]=-1;
    for(int v:e[u]){
        if(v==fa)continue;
        for(int i=s[u][1];i>=0;i--)
            for(int j=1;j<=s[v][0]&&i+j<=dep[u]+1;j++)
                g[1][i+j]=max(g[1][i+j],g[1][i]+f[v][0][j]);
        for(int i=s[u][0];i>=0;i--)
            for(int j=1;j<=s[v][1]&&i+j<=dep[u]+1;j++)
                g[1][i+j]=max(g[1][i+j],g[0][i]+f[v][1][j]);
        for(int i=s[u][0];i>=0;i--)
            for(int j=1;j<=s[v][0]&&i+j<=dep[u]+1;j++)
                g[0][i+j]=max(g[0][i+j],g[0][i]+f[v][0][j]);
        s[u][1]+=s[v][0];
        s[u][0]+=max(s[v][1],s[v][0]);
        s[u][1]=min(s[u][1],dep[u]+1);
        s[u][0]=min(s[u][0],dep[u]+1);
    }
    int ss0=s[u][0],ss1=s[u][1];
    f[u][0].resize(s[u][0]+2);
    for(int i=1;i<=s[u][0]+1&&i<=dep[u];i++){
        f[u][0][i]=g[0][i-1]+2;
        if(i<s[u][0])f[u][0][i]=max(f[u][0][i],g[0][i+1]);
    }
    f[u][1].resize(s[u][0]+2);
    s[u][0]++;
    for(int i=1;i<=s[u][1]+1&&i<=dep[u];i++){
        f[u][1][i]=g[1][i-1]+2;
        if(i<s[u][1])f[u][1][i]=max(f[u][1][i],g[1][i+1]);
    }
    for(int i=1;i<=s[u][0]&&i<=dep[u];i++)
        f[u][1][i]=max(f[u][1][i],g[0][i]+1);
    s[u][1]=s[u][0];
    for(int i=0;i<=ss0;i++)g[0][i]=-1;
    for(int i=0;i<=ss1;i++)g[1][i]=-1;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    freopen("bird.in","r",stdin);
    freopen("bird.out","w",stdout);
    cin>>n;
    for(int i=1;i<n;i++){
        int u,v;
        cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    memset(g,-1,sizeof g);
    dfs(1,0);
    cout<<max(f[1][0][1],f[1][1][1])-1;
    return 0;
}
